package offer.twoPointers;

/**
 * @author DengYuan2
 * @create 2021-02-20 21:21
 */
public class n_58_2 {
    public static void main(String[] args) {
        n_58_2 n = new n_58_2();
        String str = "abcXYZdef";
        int k=3;
        String res = n.LeftRotateString2(str, k);
        System.out.println(res);
    }

    /**
     * 我的写法-直接利用已有的，虽然能通过，但肯定不能这么做啊！！！
     * @param str
     * @param n
     * @return
     */
    public String LeftRotateString(String str,int n) {
        if (str.length()==0){
            return str;
        }
        StringBuilder res = new StringBuilder(str);
        res.append(str.substring(0,n));
        res.delete(0,n);
        return res.toString();
    }

    /**
     * 大神-思路：先将 "abc" 和 "XYZdef" 分别翻转，得到 "cbafedZYX"，
     *            然后再把整个字符串翻转得到 "XYZdefabc"。
     * @param str
     * @param n
     * @return
     */
    public String LeftRotateString2(String str,int n) {
        if (str.length()==0){
            return str;
        }
        int length = str.length();
        char[] array = str.toCharArray();
        reverse(array,0,n-1);
        reverse(array,n,length-1);
        reverse(array,0,length-1);
        return new String(array);
    }


    public void reverse(char[] array,int start,int end){
        char tmp =' ';
        while (start<end){
            tmp=array[start];
            array[start]=array[end];
            array[end]=tmp;
            start++;
            end--;
        }
    }
}
